package ar.fiuba.tp7552.buildadmin.webactions.tipoPropiedad;

import com.opensymphony.xwork2.Preparable;

import ar.fiuba.tp7552.buildadmin.model.BusinessException;
import ar.fiuba.tp7552.buildadmin.model.builds.Edificio;
import ar.fiuba.tp7552.buildadmin.model.builds.TipoPropiedad;
import ar.fiuba.tp7552.buildadmin.service.EdificioService;
import ar.fiuba.tp7552.buildadmin.service.TipoPropiedadService;
import ar.fiuba.tp7552.buildadmin.webactions.BaseAction;

public class TipoPropiedadAction extends BaseAction implements Preparable {
	
	private TipoPropiedadService tipoPropiedadService;
	private EdificioService edificioService;
	private TipoPropiedad tipoPropiedad = new TipoPropiedad();
	private Edificio edificio;
	
	// ~~ Constructor ====================================================
	
	public TipoPropiedadAction(TipoPropiedadService tipoPropiedadService, EdificioService edificioService) {
		super();
		this.tipoPropiedadService = tipoPropiedadService;
		this.edificioService = edificioService;
	}
	
	// ~~ Actions ========================================================
	@Override
	public void prepare() throws Exception {
		if (tipoPropiedad != null && tipoPropiedad.getId() != null) {
			tipoPropiedad = tipoPropiedadService.getTipoPropiedad(tipoPropiedad.getId());
			edificio = tipoPropiedad.getEdificio();
		} else if (edificio != null && edificio.getId() != null) {
			edificio = edificioService.get(edificio.getId());
		}
	}
	
	
	public String load() {
		return BaseAction.SUCCESS;
	}

	/**
	 * Crea un nuevo tipo de Propiedad validando que no se repita
	 * el nombre.
	 * @return
	 */
	public String save() {
		
		if (tipoPropiedad.isNew()) {
			try {
				tipoPropiedadService.createTipoPropiedad(tipoPropiedad);
			} catch (BusinessException e) {
				this.addFieldError("tipoPropiedad", e.getMessage());
				return BaseAction.INPUT;// vuelvo al formulario para mostrar el error.
			}
		} else {
			tipoPropiedadService.update(tipoPropiedad);
		}
		return BaseAction.SUCCESS;
	}
	
	public String delete() {
		tipoPropiedadService.deleteTipoPropiedad(tipoPropiedad.getId());
		return BaseAction.SUCCESS;
	}

	// ~~ getters y setters ==============================================
	public TipoPropiedad getTipoPropiedad() {
		return tipoPropiedad;
	}
	public void setTipoPropiedad(TipoPropiedad tipoPropiedad) {
		this.tipoPropiedad = tipoPropiedad;
	}
	public Edificio getEdificio() {
		return edificio;
	}
	public void setEdificio(Edificio edificio) {
		this.edificio = edificio;
	}
}